#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;

int q[N];//记录的是长度为i的上升子序列中尾巴最小的数

int n;
int arr[N];
int ret=0;
int main()
{
    cin>>n;
    vector<int> dp(n+2,1);//记录尾部是i的上升子序列集合
    for(int i=1;i<=n;i++) cin>>arr[i];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i-1;j++)
        {
            if(arr[i]>arr[j])
            {
               if(dp[j]+1>dp[i])
               {
                   dp[i]=dp[j]+1;
               }
            }
        }
        //也可以便利dp数组找最大值
        ret=max(dp[i],ret);
    }
    cout<<ret;
}